using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DefenseTools._DistanceandDirection
{
    /// <summary>
    /// <para>Generate Range Rings From Lookup Table</para>
    /// <para>Creates a set of concentric circles from a center based on values stored in a lookup table.</para>
    /// <para>根据存储在查找表中的值从中心创建一组同心圆。</para>
    /// </summary>    
    [DisplayName("Generate Range Rings From Lookup Table")]
    public class GenerateRangeRingsFromTable : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateRangeRingsFromTable()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features (Center Points)</para>
        /// <para>The point feature set that identifies the center of the range ring. The input must have at least one point.</para>
        /// <para>用于标识范围环中心的点要素集。输入必须至少有一个点。</para>
        /// </param>
        /// <param name="_in_table">
        /// <para>Input Lookup Table</para>
        /// <para>The input table that contains values for creating rings.</para>
        /// <para>包含用于创建环的值的输入表。</para>
        /// </param>
        /// <param name="_out_feature_class_rings">
        /// <para>Output Feature Class (Rings)</para>
        /// <para>The output feature class containing the ring features.</para>
        /// <para>包含环形要素的输出要素类。</para>
        /// </param>
        /// <param name="_lookup_name">
        /// <para>Selected Name</para>
        /// <para>The row from the Input Lookup Table that contains the input values for minimum and maximum values or number of rings and interval.</para>
        /// <para>输入查找表中包含最小值和最大值或环数和间隔的输入值的行。</para>
        /// </param>
        /// <param name="_range_rings_type">
        /// <para>Range Ring Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the method used to create the range rings.</para>
        ///   <bulletList>
        ///     <bullet_item>Interval—Range rings will be generated based on the number of rings and distance between rings. This the default.</bullet_item><para/>
        ///     <bullet_item>Minimum and maximum—Range rings will be generated based on a minimum and maximum distance.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定用于创建范围环的方法。</para>
        ///   <bulletList>
        ///     <bullet_item>间隔—将根据环的数量和环之间的距离生成范围环。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>最小值和最大值—将根据最小距离和最大距离生成范围环。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public GenerateRangeRingsFromTable(object _in_features, object _in_table, object _out_feature_class_rings, object _lookup_name, _range_rings_type_value _range_rings_type)
        {
            this._in_features = _in_features;
            this._in_table = _in_table;
            this._out_feature_class_rings = _out_feature_class_rings;
            this._lookup_name = _lookup_name;
            this._range_rings_type = _range_rings_type;
        }
        public override string ToolboxName => "Defense Tools";

        public override string ToolName => "Generate Range Rings From Lookup Table";

        public override string CallName => "defense.GenerateRangeRingsFromTable";

        public override List<string> AcceptEnvironments => ["outputCoordinateSystem", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_features, _in_table, _out_feature_class_rings, _lookup_name, _range_rings_type.GetGPValue(), _out_feature_class_radials, _number_of_radials, _distance_units.GetGPValue(), _lookup_name_field, _min_range_field, _max_range_field, _number_of_rings_field, _ring_interval_field];

        /// <summary>
        /// <para>Input Features (Center Points)</para>
        /// <para>The point feature set that identifies the center of the range ring. The input must have at least one point.</para>
        /// <para>用于标识范围环中心的点要素集。输入必须至少有一个点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features (Center Points)")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Input Lookup Table</para>
        /// <para>The input table that contains values for creating rings.</para>
        /// <para>包含用于创建环的值的输入表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Lookup Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_table { get; set; }


        /// <summary>
        /// <para>Output Feature Class (Rings)</para>
        /// <para>The output feature class containing the ring features.</para>
        /// <para>包含环形要素的输出要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class (Rings)")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class_rings { get; set; }


        /// <summary>
        /// <para>Selected Name</para>
        /// <para>The row from the Input Lookup Table that contains the input values for minimum and maximum values or number of rings and interval.</para>
        /// <para>输入查找表中包含最小值和最大值或环数和间隔的输入值的行。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Selected Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _lookup_name { get; set; }


        /// <summary>
        /// <para>Range Ring Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the method used to create the range rings.</para>
        ///   <bulletList>
        ///     <bullet_item>Interval—Range rings will be generated based on the number of rings and distance between rings. This the default.</bullet_item><para/>
        ///     <bullet_item>Minimum and maximum—Range rings will be generated based on a minimum and maximum distance.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定用于创建范围环的方法。</para>
        ///   <bulletList>
        ///     <bullet_item>间隔—将根据环的数量和环之间的距离生成范围环。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>最小值和最大值—将根据最小距离和最大距离生成范围环。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Range Ring Type")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _range_rings_type_value _range_rings_type { get; set; }

        public enum _range_rings_type_value
        {
            /// <summary>
            /// <para>Interval</para>
            /// <para>Interval—Range rings will be generated based on the number of rings and distance between rings. This the default.</para>
            /// <para>间隔—将根据环的数量和环之间的距离生成范围环。这是默认设置。</para>
            /// </summary>
            [Description("Interval")]
            [GPEnumValue("INTERVAL")]
            _INTERVAL,

            /// <summary>
            /// <para>Minimum and maximum</para>
            /// <para>Minimum and maximum—Range rings will be generated based on a minimum and maximum distance.</para>
            /// <para>最小值和最大值—将根据最小距离和最大距离生成范围环。</para>
            /// </summary>
            [Description("Minimum and maximum")]
            [GPEnumValue("MIN_MAX")]
            _MIN_MAX,

        }

        /// <summary>
        /// <para>Output Feature Class (Radials)</para>
        /// <para>The feature class containing the output radial features.</para>
        /// <para>包含输出径向要素的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class (Radials)")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_feature_class_radials { get; set; } = null;


        /// <summary>
        /// <para>Number of Radials</para>
        /// <para>The number of radials to create.</para>
        /// <para>要创建的径向数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of Radials")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _number_of_radials { get; set; } = null;


        /// <summary>
        /// <para>Distance Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the linear unit of measurement for the Ring Interval Field parameter or the Input Table Minimum Range and Input Table Maximum Range parameters.</para>
        ///   <bulletList>
        ///     <bullet_item>Meters—The unit will be meters. This is the default.</bullet_item><para/>
        ///     <bullet_item>Kilometers—The unit will be kilometers.</bullet_item><para/>
        ///     <bullet_item>Miles—The unit will be miles.</bullet_item><para/>
        ///     <bullet_item>Nautical miles—The unit will be nautical miles.</bullet_item><para/>
        ///     <bullet_item>Feet—The unit will be feet.</bullet_item><para/>
        ///     <bullet_item>US survey feet—The unit will be U.S. survey feet.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定“环间隔字段”参数或“输入表最小范围”和“输入表最大范围”参数的线性测量单位。</para>
        ///   <bulletList>
        ///     <bullet_item>米—单位将为米。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>千米—单位将为千米。</bullet_item><para/>
        ///     <bullet_item>英里—单位将为英里。</bullet_item><para/>
        ///     <bullet_item>海里—单位将为海里。</bullet_item><para/>
        ///     <bullet_item>英尺—单位将为英尺。</bullet_item><para/>
        ///     <bullet_item>美国测量英尺—单位为美国测量英尺。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _distance_units_value _distance_units { get; set; } = _distance_units_value._METERS;

        public enum _distance_units_value
        {
            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—The unit will be meters. This is the default.</para>
            /// <para>米—单位将为米。这是默认设置。</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("METERS")]
            _METERS,

            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—The unit will be kilometers.</para>
            /// <para>千米—单位将为千米。</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("KILOMETERS")]
            _KILOMETERS,

            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—The unit will be miles.</para>
            /// <para>英里—单位将为英里。</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("MILES")]
            _MILES,

            /// <summary>
            /// <para>Nautical miles</para>
            /// <para>Nautical miles—The unit will be nautical miles.</para>
            /// <para>海里—单位将为海里。</para>
            /// </summary>
            [Description("Nautical miles")]
            [GPEnumValue("NAUTICAL_MILES")]
            _NAUTICAL_MILES,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—The unit will be feet.</para>
            /// <para>英尺—单位将为英尺。</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("FEET")]
            _FEET,

            /// <summary>
            /// <para>US survey feet</para>
            /// <para>US survey feet—The unit will be U.S. survey feet.</para>
            /// <para>美国测量英尺—单位为美国测量英尺。</para>
            /// </summary>
            [Description("US survey feet")]
            [GPEnumValue("US_SURVEY_FEET")]
            _US_SURVEY_FEET,

        }

        /// <summary>
        /// <para>Input Table Selected Name Field</para>
        /// <para>The field from the input table that contains the Selected Name value. The default field name is Name.</para>
        /// <para>输入表中包含“选定名称”值的字段。默认字段名称为“名称”。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Table Selected Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _lookup_name_field { get; set; } = null;


        /// <summary>
        /// <para>Input Table Minimum Range</para>
        /// <para>The field from the input table that contains the minimum range value. The default field name is Min.</para>
        /// <para>输入表中包含最小范围值的字段。默认字段名称为 Min。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Table Minimum Range")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _min_range_field { get; set; } = null;


        /// <summary>
        /// <para>Input Table Maximum Range</para>
        /// <para>The field from the input table that contains the maximum range value. The default field name is Max.</para>
        /// <para>输入表中包含最大范围值的字段。默认字段名称为 Max。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Table Maximum Range")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _max_range_field { get; set; } = null;


        /// <summary>
        /// <para>Number of Rings Field</para>
        /// <para>The field from the input table that contains the number of rings value. The default field name is Rings.</para>
        /// <para>输入表中包含环数值的字段。默认字段名称为 Rings。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of Rings Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _number_of_rings_field { get; set; } = null;


        /// <summary>
        /// <para>Ring Interval Field</para>
        /// <para>The field from the input table that contains the ring interval value. The default field name is Interval.</para>
        /// <para>输入表中包含环间隔值的字段。默认字段名称为 Interval。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Ring Interval Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _ring_interval_field { get; set; } = null;


        public GenerateRangeRingsFromTable SetEnv(object outputCoordinateSystem = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(outputCoordinateSystem: outputCoordinateSystem, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}